package com.liyiwei.redislock;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RedisLockApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedisLockApplication.class, args);
    }


//
//    --第一个参数：锁的key
//    local key = KEYS[1];
//--第二个参数：访问线程的唯一ID
//    local threadId = KEYS[2];
//--第三个参数：释放锁的时间
//    local releaseTime = KEYS[3];
//
//
//if(redis.call('exists',key) == 0) then
//    --不存在指定key，则新建锁，并设置锁的数量
//   redis.call('hset',key,threadId,'1')；
//            --设置锁的过期时间
//   redis.call('expire',key,releaseTime);
//   --设置成功返回1
//   return 1;
//    end;
//
//--如果锁存在，取出锁对应的hash结构的key，并判断是否是同一个线程，同一个线程就返回1，不同线程代表获取锁失败
//--锁已经存在，判断threadId是否是自己
//if(redis.call('hexists',key,threadId) == 1) then
//    --如果是自己，重入次数加一,并设置有效期
//    redis.call('hincyby',key,threadId,'1');
//    redis.call('expire',key,releaseTime);
//    return 1;
//    end;
//--代码走到这里，说明获取的锁不是自己，获取锁失败
//return 0;

}
